
package register;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import javax.swing.ImageIcon;
import model.Auktion;
import model.Kategori;
import model.Maleri;
import model.Møbel;
import model.Smykke;
import model.Vare;
import model.Vin;

/**
 *
 * @author Jeppe
 */
public class AuktionsRegister {

    private ArrayList<Auktion> auktionsList;
    private static AuktionsRegister instance;
    private final ArrayList<Kategori> kategoriList = new ArrayList<>();

    private AuktionsRegister(boolean opretAuktioner) {
        auktionsList = new ArrayList<>();
        BrugerRegister brugerreg = BrugerRegister.getInstance();
        if (opretAuktioner) {
            Calendar calStart = Calendar.getInstance();
            calStart.set(2014, 0, 22, 15, 0);

            Calendar cal1 = Calendar.getInstance();
            
            cal1.set(2014, 0, calStart.getTime().getDate()+7, 17, 0);
            auktionsList.add(new Auktion(80000, calStart, cal1, brugerreg.getBrugerByTlfnr(31314239), new Møbel("Teak", "1500x2000x80", "Spisebord", "Fint gammelt spisebord", 15000, new Kategori("Møbel"), new ImageIcon(getClass().getResource("/images/bord.png")))));
            Calendar cal2 = Calendar.getInstance();
            cal2.set(cal2.getTime().getYear()+1900, 2, 24, 17, 0);
            auktionsList.add(new Auktion(12000, calStart, cal2, brugerreg.getBrugerByTlfnr(31314239), new Vin("Clausade", "Frankrig", 2004, "Rondo", 14.5, 70, 6, "Sassogrande Rosso", "Super vin til prisen. Lad være med at \nunderbyd.", 2000, new Kategori("Vin"), new ImageIcon(getClass().getResource("/images/download.png")))));
            Calendar cal3 = Calendar.getInstance();
            cal3.set(cal3.getTime().getYear()+1900, 9, 25, 17, 0);
            auktionsList.add(new Auktion(3000, calStart, cal3, brugerreg.getBrugerliste().get(0), new Maleri("Claude Monet", 1847, "Gotisk", "60x120", "Den fordømte Kattemis", "Flot og velholdt maleri", 5000, new Kategori("Maleri"), new ImageIcon(getClass().getResource("/images/denfordømtekattemis.jpg")))));
            Calendar cal4 = Calendar.getInstance();
            cal4.set(cal4.getTime().getYear()+1900, 0, calStart.getTime().getDate()+3, 17, 0);
            auktionsList.add(new Auktion(120000, calStart, cal4, brugerreg.getBrugerByTlfnr(24906102), new Smykke("Ja, 18 karat", "Ja", "HvidGuld", "Diamant Ring", "Den smukkeste ring i verden..\nEller tæt på i hvert fald.", 160000, new Kategori("Smykke"), new ImageIcon(getClass().getResource("/images/diamantring.jpg")))));
            Calendar cal5 = Calendar.getInstance();
            cal5.set(cal5.getTime().getYear()+1900, cal5.getTime().getMonth(), cal5.getTime().getDay()+2, cal5.getTime().getHours(), cal5.getTime().getMinutes()+2);            
            auktionsList.add(new Auktion(25000, calStart, cal5, brugerreg.getBrugerByTlfnr(24906102), new Møbel("Læder", "50x75x110", "Ægget", "Den berømte designerstol i sort læder", 35000, new Kategori("Møbel"), new ImageIcon(getClass().getResource("/images/fritz-hansen-ægget-sort.jpg")))));
            Calendar cal6 = Calendar.getInstance();
            cal6.set(cal6.getTime().getYear()+1900, calStart.getTime().getMonth()+1, calStart.getTime().getDate()+1, calStart.getTime().getHours()-3, 0);
            auktionsList.add(new Auktion(50, calStart, cal6, brugerreg.getBrugerByTlfnr(31314239), new Vin("Domaine Romanée-Conti", "Frankrig", 1978, "Nænsomt håndplukkede", 13.5, 75, 1, "Romanée-Conti", "Verdens dyreste vin nu til kun 50 kr. som \nmindste pris! UHØRT billigt.", 80000, new Kategori("Vin"), new ImageIcon(getClass().getResource("/images/dyrVin.jpg")))) );
            
            kategoriList.add(new Kategori("Vis alle"));
            kategoriList.add(new Kategori("Vis aktive"));
            kategoriList.add(new Kategori("Møbel"));
            kategoriList.add(new Kategori("Smykke"));
            kategoriList.add(new Kategori("Vin"));
            kategoriList.add(new Kategori("Maleri"));
        }
    }

    public ArrayList<Kategori> getKategoriList() {
        return kategoriList;
    }

    public static AuktionsRegister getInstance() {
        if (instance == null) {
            instance = new AuktionsRegister(true);
        }
        return instance;
    }

    public ArrayList<Auktion> getAuktionsList() {
        return auktionsList;
    }
    

    public ArrayList<Auktion> getAuktionsListByKategori(Kategori kategori) {
        ArrayList<Auktion> auktioner = new ArrayList<>();
        for (int i = 0; i < auktionsList.size(); i++) {
            if (auktionsList.get(i).getVare().getKategori().getNavn().equals(kategori.getNavn())) {
                auktioner.add(auktionsList.get(i));
            }
            
        }
        return auktioner;
    }

    public ArrayList<Auktion> getAktiveAuktionsList() {
        ArrayList<Auktion> aktiveAuktioner = new ArrayList<>();
        for (int i = 0; i < auktionsList.size(); i++) {
            if (auktionsList.get(i).getSluttidspunkt().getTimeInMillis() > Calendar.getInstance().getTimeInMillis()) {
                aktiveAuktioner.add(auktionsList.get(i));
            }
        }
        return aktiveAuktioner;
    }

    public ArrayList<Auktion> getAuktionerByPris() {
        ArrayList<Auktion> auktioner = new ArrayList<>();
        for (int i = 0; i < auktionsList.size(); i++) {
            if (auktionsList.get(i).getVare().getVurderingspris() < 5000) {
                auktioner.add(auktionsList.get(i));
            }
            if ((auktionsList.get(i).getVare().getVurderingspris() >= 5000) && (auktionsList.get(i).getVare().getVurderingspris() < 10000)) {
                auktioner.add(auktionsList.get(i));
            }
            if ((auktionsList.get(i).getVare().getVurderingspris() >= 10000) && (auktionsList.get(i).getVare().getVurderingspris() < 20000)) {
                auktioner.add(auktionsList.get(i));
            }
            if (auktionsList.get(i).getVare().getVurderingspris() >= 20000) {
                auktioner.add(auktionsList.get(i));
            }
        }

        return auktioner;
    }

    public ArrayList<Auktion> getSearchResult(String category, String first, String second, String third, String fourth) {

        ArrayList<Auktion> auktioner = new ArrayList();
        Iterator<Auktion> list = auktionsList.iterator();

        while (list.hasNext()) {
            boolean isOkForList = false;
            Auktion a = list.next();
            Vare vare = a.getVare();
            switch (category) {
                case "Møbel":
                    if (vare instanceof Møbel) {
                        Møbel m = (Møbel) vare;
                        // navn
                        if (first != null) {
                            if (m.getNavn().equals(first) || first.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }

                        // dimensioner
                        if (second != null && isOkForList) {
                            if (m.getDimensioner().equals(second) || second.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }

                        // navn
                        if (third != null && isOkForList) {
                            if (m.getMateriale().equals(third) || third.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }
                    }
                    break;
                case "Maleri":
                    if (vare instanceof Maleri) {
                        Maleri m = (Maleri) vare;

                        // kunstnernavn
                        if (first != null) {
                            if (m.getKunstner().equals(first) || first.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }

                        // stilart
                        if (second != null && isOkForList) {
                            if (m.getStilArt().equals(second) || second.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }

                        // årstal
                        if (third != null && isOkForList) {
                            String aarstal = "" + m.getAarstal();
                            if (aarstal.equals(third) || third.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }

                        // størrelse
                        if (fourth != null && isOkForList) {
                            if (m.getStoerrelse().equals(fourth) || fourth.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }
                    }

                    break;
                case "Smykke":
                    if (vare instanceof Smykke) {
                        Smykke s = (Smykke) vare;

                        // har smykke ædelsten
                        if (first != null) {
                            System.out.println("ædelsten " + s.getÆdelsten() + "   " + first);
                            if (s.getÆdelsten().equals(first) || first.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }

                        // har smykke stempel
                        if (second != null && isOkForList) {
                            if (s.getStempel().equals(second) || second.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }
                    }
                    break;
                case "Vin":
                    if (vare instanceof Vin) {
                        Vin v = (Vin) vare;

                        // kunstnernavn
                        if (first != null) {
                            if (v.getProducent().equals(first) || first.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }

                        // land
                        if (second != null && isOkForList) {
                            if (v.getLand().equals(second) || second.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }


                        if (third != null && isOkForList) {
                            if (v.getDruer().equals(third) || third.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }

                        // årstal
                        if (fourth != null && isOkForList) {
                            String aargang = "" + v.getÅrgang();
                            if (aargang.equals(fourth) || fourth.equals("Alle")) {
                                isOkForList = true;
                            } else {
                                isOkForList = false;
                            }
                        }
                    }

                    break;
            } // switch

            // tilføjes hvis vare bliver godkendt
            if (isOkForList) {
                auktioner.add(a);
            }

        }

        return auktioner;
    }
}
